/** * Copyright (c) 2010-2017 by the respective copyright holders. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.openhab.io.homekit.internal.accessories; import java.util.concurrent.CompletableFuture; import org.eclipse.smarthome.core.items.GenericItem; import org.eclipse.smarthome.core.items.GroupItem; import org.eclipse.smarthome.core.items.ItemRegistry; import org.eclipse.smarthome.core.library.items.SwitchItem; import org.eclipse.smarthome.core.library.types.OnOffType; import org.openhab.io.homekit.internal.HomekitAccessoryUpdater; import org.openhab.io.homekit.internal.HomekitTaggedItem; import com.beowulfe.hap.HomekitCharacteristicChangeCallback; import com.beowulfe.hap.accessories.Switch; /** * Implements Switch using an Item that provides an On/Off state. * * @author Andy Lintner */ public class HomekitSwitchImpl extends AbstractHomekitAccessoryImpl<SwitchItem>implements Switch { public HomekitSwitchImpl(HomekitTaggedItem taggedItem, ItemRegistry itemRegistry, HomekitAccessoryUpdater updater) { super(taggedItem, itemRegistry, updater, SwitchItem.class); } @Override public CompletableFuture<Boolean> getSwitchState() { OnOffType state = (OnOffType) getItem().getStateAs(OnOffType.class); return CompletableFuture.completedFuture(state == OnOffType.ON); } @Override public CompletableFuture<Void> setSwitchState(boolean state) throws Exception { GenericItem item = getItem(); if (item instanceof SwitchItem) { ((SwitchItem) item).send(state ? OnOffType.ON : OnOffType.OFF); } else if (item instanceof GroupItem) { ((GroupItem) item).send(state ? OnOffType.ON : OnOffType.OFF); } return CompletableFuture.completedFuture(null); } @Override public void subscribeSwitchState(HomekitCharacteristicChangeCallback callback) { getUpdater().subscribe(getItem(), callback); } @Override public void unsubscribeSwitchState() { getUpdater().unsubscribe(getItem()); } }